 
  

 






<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html>

<!-- Mirrored from www.javapractices.com/topic/TopicAction.do?Id=14 by HTTrack Website Copier/3.x [XR&CO'2010], Sun, 12 Jun 2011 17:28:08 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=UTF-8"><!-- /Added by HTTrack -->
<head>
 <title>
  Java Practices -> Initializing fields to 0-false-null is redundant
 </title>
 <link rel="stylesheet" type="text/css" href="../stylesheet8.css" media="all">
 
 <link rel="shortcut icon" href='../images/favicon.ico' type="image/vnd.microsoft.icon">
 <meta name="description" content="Concise presentations of java programming practices, tasks, and conventions, amply illustrated with syntax highlighted code examples.">
 
 <meta name='keywords' content='constructor,field,java,java programming,java practices,java idiom,java style,java design patterns,java coding conventions,'>
 
 
</head>
 
<body>


<div class='menu-bar'>
 
  <a href='../home/HomeAction.html' title='Table of Contents'>Home</a> |
  <a href='../vote/VoteSummaryAction-2.html' title='View Poll Results'>Poll</a> |
   
  <A href='../feedback/FeedbackAction451f-2.html?Operation=Show' title='Send Your Feedback'>Wiki</a> |
  <b><a href='../source/SourceAction-2.html' title='Grab Source Code'>Source Code</a></b><IMG class='no-margin' SRC="../images/goldstar.gif" ALT=""> |

  <a href='http://www.web4j.com/Java_Web_Application_Framework_Overview.jsp?From=1' title='Free Download - Java Web Application Framework'><b>WEB4J</b></a> |
  
  <a href='http://www.date4j.net/' title='Replacement for java.util.Date'><b>DATE4J</b></a> |

   <a href='../references/ReferencesAction-2.html' title='References'>Links</a>
   
  <form action='http://www.javapractices.com/search/SearchAction.do' method='get' class='search-form'>
   <input type='text' name='SearchTerms' value="" size=12 maxlength=50 class='search'>
   <input type='submit' value="Search">
  </form>
 
</div>

<P>



  

 






<p class="display-messages">

 

 

</p>


<div class="main-layout">
 
   

 




<div class='page-title'>Initializing fields to 0-false-null is redundant</div>

<div class='main-body'>
 
<br>
One of the most fundamental aspects of a programming language is how it initializes data. 
For Java, this is defined explicitly in the language <a href='http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.12.5'>specification</a>.
For <em>fields and array components</em>, when items are created, they are automatically set to the following default values by the system:
<ul>
 <li>numbers: <tt>0</tt> or <tt>0.0</tt>
 <li>booleans: <tt>false</tt>
 <li>object references: <tt>null</tt>
</ul>

<P>This means that explicitly setting fields to 0, false, or null (as the case may be) is unnecessary and redundant.
Since this language feature was included in order to, in part, reduce repetitive coding, it's a good idea to take full advantage of it. 
Insisting that fields should be explicitly initialized to 0, false, or null is an idiom which is likely inappropriate to the Java programming language.

<P>Furthermore, setting a field explicitly to 0, false, or null may even cause the same operation to be performed twice (depending on your compiler).

<p><b>Example</b>
<br>
<PRE>

<span class='keyword'>public</span> <span class='keyword'>final</span> <span class='keyword'>class</span> Quark {

  <span class='keyword'>public</span> Quark(String aName, <span class='keyword'>double</span> aMass){
    fName = aName;
    fMass = aMass;
  }

  <span class='comment'>// PRIVATE //
</span>
  <span class='comment'>//WITHOUT redundant initialization to default values
</span>  <span class='comment'>//private String fName;
</span>  <span class='comment'>//private double fMass;
</span>
  <span class='comment'>//WITH redundant initialization to default values
</span>  <span class='keyword'>private</span> String fName = <span class='keyword'>null</span>;
  <span class='keyword'>private</span> <span class='keyword'>double</span> fMass = <span class='literal'>0.0d</span>;
} 
</PRE>
<br>
<br>If the bytecode of the <tt>Quark</tt> class is examined, the duplicated
operations become clear (here, Sun's <tt>javac</tt> compiler was used)&nbsp;
:
<br>&nbsp;
<table COLS=2 WIDTH="100%"  border="1" cellpadding="3" cellspacing="0">
<tr>
<th>WITHOUT redundant init</th>

<th>WITH redundant init</th>
</tr>

<tr VALIGN=TOP>
<td><tt>>javap -c -classpath . Quark</tt>
<br><tt>Compiled from Quark.java</tt>
<br><tt>public final class Quark extends java.lang.Object {</tt>
<br><tt>&nbsp;&nbsp;&nbsp; public Quark(java.lang.String,double);</tt>
<br><tt>}</tt>
<p><tt>Method Quark(java.lang.String,double)</tt>
<br><tt>&nbsp;&nbsp; 0 aload_0</tt>
<br><tt>&nbsp;&nbsp; 1 invokespecial #1 &lt;Method java.lang.Object()></tt>
<br><tt>&nbsp;&nbsp; 4 aload_0</tt>
<br><tt>&nbsp;&nbsp; 5 aload_1</tt>
<br><tt>&nbsp;&nbsp; 6 putfield #2 &lt;Field java.lang.String fName></tt>
<br><tt>&nbsp;&nbsp; 9 aload_0</tt>
<br><tt>&nbsp; 10 dload_2</tt>
<br><tt>&nbsp; 11 putfield #3 &lt;Field double fMass></tt>
<br><tt>&nbsp; 14 return</tt></td>

<td><tt>>javap -c -classpath . Quark</tt>
<br><tt>Compiled from Quark.java</tt>
<br><tt>public final class Quark extends java.lang.Object {</tt>
<br><tt>&nbsp;&nbsp;&nbsp; public Quark(java.lang.String,double);</tt>
<br><tt>}</tt>
<p><tt>Method Quark(java.lang.String,double)</tt>
<br><tt>&nbsp;&nbsp; 0 aload_0</tt>
<br><tt>&nbsp;&nbsp; 1 invokespecial #1 &lt;Method java.lang.Object()></tt>
<br><tt>&nbsp;&nbsp; 4 aload_0</tt>
<br><tt>&nbsp;&nbsp; 5 aconst_null</tt>
<br><tt>&nbsp;&nbsp; 6 putfield #2 &lt;Field java.lang.String fName></tt>
<br><tt>&nbsp;&nbsp; 9 aload_0</tt>
<br><tt>&nbsp; 10 dconst_0</tt>
<br><tt>&nbsp; 11 putfield #3 &lt;Field double fMass></tt>
<br><tt>&nbsp; 14 aload_0</tt>
<br><tt>&nbsp; 15 aload_1</tt>
<br><tt>&nbsp; 16 putfield #2 &lt;Field java.lang.String fName></tt>
<br><tt>&nbsp; 19 aload_0</tt>
<br><tt>&nbsp; 20 dload_2</tt>
<br><tt>&nbsp; 21 putfield #3 &lt;Field double fMass></tt>
<br><tt>&nbsp; 24 return</tt></td>
</tr>
</table>

<p>
<br>

</div>




<div class='topic-section'>See Also :</div>
<div class='main-body'>
 
  
  <a href='TopicAction19ff-2.html?Id=11'>Constructors in general</a> <br>
 
  
  <a href='TopicAction620e-2.html?Id=126'>Don't declare local variables before use</a> <br>
 
  
  <a href='TopicAction145a-2.html?Id=146'>Examine bytecode</a> <br>
 
</div>


<div class='topic-section'>Would you use this technique?</div>
<div class='main-body'>
  
  <form action="http://www.javapractices.com/vote/AddVoteAction.do" method='post'>
    Yes<input type='radio' name='Choice' value='Y' >
    &nbsp;&nbsp;No<input type='radio' name='Choice' value='N'>
    &nbsp;&nbsp;Undecided<input type='radio' name='Choice' value="?" >
    &nbsp;&nbsp;<input type=submit value="Vote" >
    <input type='hidden' name='Operation' value='Apply'>
    <input type='hidden' name='TopicId' value='14'>
  </form>
</div>

<div style='height:10.0em;'></div>

 
 
</div>

  

 





<div align='center' class='legalese'>  
&copy; 2011 Hirondelle Systems |
<a href='../source/SourceAction-2.html'><b>Source Code</b></a><IMG class='no-margin' SRC="../images/goldstar.gif" ALT=""> |
<a href="mailto:webmaster@javapractices.com">Contact</a> |
<a href="http://creativecommons.org/licenses/by-nc-sa/1.0/">License</a> |
<a href='../apps/cjp.rss'>RSS</a>
<!-- ukey="2AC36CD2" -->
<!-- ckey="16DF3D87" -->
<br>

 Individual code snippets can be used under this <a href='../LICENSE.txt'>BSD license</a> - Last updated on June 6, 2010.<br>
 Over 150,000 unique IPs last month - <span title='Java Practices 2.6.5, Mon May 16 00:00:00 EDT 2011'>Built with</span> <a href='http://www.web4j.com/'>WEB4J</a>.<br>
 - In Memoriam : Bill Dirani -
</div>

<script src="../../www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-2633428-1";
urchinTracker();
</script>



</body>

<!-- Mirrored from www.javapractices.com/topic/TopicAction.do?Id=14 by HTTrack Website Copier/3.x [XR&CO'2010], Sun, 12 Jun 2011 17:28:08 GMT -->
<!-- Added by HTTrack --><meta http-equiv="content-type" content="text/html;charset=UTF-8"><!-- /Added by HTTrack -->
</html>
